package customerEnter.Frame.Utils;

import org.apache.log4j.Logger;

/**
 * @author zhang
 * 
 * @since 2015年9月19日
 * 
 *        百度推送
 * 
 *        api.push.baidu.com api.tuisong.baidu.com channel.api.duapp.com
 * 
 */
@SuppressWarnings("unused")
public class PushUtils {

	private final static Logger	log			= Logger.getLogger(PushUtils.class);

	// 访问令牌，可通过该值获得开发者app的信息
	private static final String	apiKey		= "vHaveFi8Fs1uFjgPH7mGe9Ej";

	// 与apiKey成对出现，用于app的合法身份验证
	private static final String	secretKey	= "eg84NF4LQTqgeNXGAUWiLPeDlteHM0VL";

	//
	// public static BaiduPushClient getPushClient() {
	//
	// // 1. 创建PushKeyPair用于app的合法身份认证
	// PushKeyPair pair = new PushKeyPair(apiKey, secretKey);
	//
	// // 2. 创建BaiduPushClient，访问SDK接口
	// BaiduPushClient pushClient = new BaiduPushClient(pair,
	// BaiduPushConstants.CHANNEL_REST_URL);
	//
	// // 3. 注册YunLogHandler，获取本次请求的交互信息
	// pushClient.setChannelLogHandler(new YunLogHandler() {
	// @Override
	// public void onHandle(YunLogEvent event) {
	// log.info(event.getMessage());
	// }
	// });
	//
	// return pushClient;
	// }

	/**
	 * 向单个设备推送消息
	 * 
	 * @param content
	 *            消息内容
	 * @param channelId
	 *            唯一对应一台设备
	 */
	public static void pushMsgToSingleDevice(String content, String channelId, String deviceCode, Long deviceID) {
		//
		// // 1. 创建BaiduPushClient，访问SDK接口
		// BaiduPushClient pushClient = getPushClient();
		//
		// try {
		// JSONObject notification = new JSONObject();
		// JSONObject jsonAPS = new JSONObject();
		// jsonAPS.put("alert", content);
		// jsonAPS.put("badge", 1);
		// notification.put("aps", jsonAPS);
		// notification.put("deviceCode", deviceCode);
		// notification.put("deviceID", deviceID);
		//
		// // 2. 设置请求参数，创建请求实例
		// PushMsgToSingleDeviceRequest request = new
		// PushMsgToSingleDeviceRequest().addChannelId(channelId) // 唯一对应一台设备
		// .addMessageType(1) // 消息类型 0：透传消息 1：通知 默认值为0
		// .addMsgExpires(new Integer(3600)) // 过期时间(秒) 默认 3600 * 5
		// .addMessage(notification.toString()) // 消息内容，json格式
		// .addDeployStatus(1) // 1：开发状态 2：生产状态
		// .addDeviceType(4); // 3：Android 4：IOS
		//
		// // 3. 执行Http请求
		// PushMsgToSingleDeviceResponse response =
		// pushClient.pushMsgToSingleDevice(request);
		//
		// // 4. Http请求返回值解析
		// log.info("msgId: " + response.getMsgId() + ",sendTime: " +
		// response.getSendTime());
		// } catch (PushClientException e) {
		// e.printStackTrace();
		// } catch (PushServerException e) {
		// log.info(String.format("requestId: %d, errorCode: %d, errorMessage: %s",
		// e.getRequestId(),
		// e.getErrorCode(), e.getErrorMsg()));
		// }
	}

	/**
	 * 推送消息给所有设备，即广播推送。
	 * 
	 * @param content
	 */
	public static void pushMsgToAll(String content, String deviceCode, Long deviceID) {
		//
		// BaiduPushClient pushClient = getPushClient();
		// try {
		//
		// JSONObject notification = new JSONObject();
		// JSONObject jsonAPS = new JSONObject();
		// jsonAPS.put("alert", content);
		// jsonAPS.put("badge", 1);
		// notification.put("aps", jsonAPS);
		// notification.put("deviceCode", deviceCode);
		// notification.put("deviceID", deviceID);
		//
		// PushMsgToAllRequest request = new
		// PushMsgToAllRequest().addMsgExpires(new
		// Integer(3600)).addMessageType(1)
		// .addMessage(notification.toString()).addDepolyStatus(1).addDeviceType(4);
		// PushMsgToAllResponse response = pushClient.pushMsgToAll(request);
		// log.info("msgId: " + response.getMsgId() + ",sendTime: " +
		// response.getSendTime() + ",timerId: "
		// + response.getTimerId());
		// } catch (PushClientException e) {
		// e.printStackTrace();
		// } catch (PushServerException e) {
		// log.info(String.format("requestId: %d, errorCode: %d, errorMessage: %s",
		// e.getRequestId(),
		// e.getErrorCode(), e.getErrorMsg()));
		// }

	}

	/**
	 * 向绑定到tag中的用户推送消息，即普通组播。
	 * 
	 * @param content
	 * @param tagNames
	 */
	public static void pushMsgToTag(String tagName, String content, String deviceCode, Long deviceID) {

		// BaiduPushClient pushClient = getPushClient();
		//
		// try {
		// JSONObject notification = new JSONObject();
		// JSONObject jsonAPS = new JSONObject();
		// jsonAPS.put("alert", content);
		// jsonAPS.put("badge", 1);
		// notification.put("aps", jsonAPS);
		// notification.put("deviceCode", deviceCode);
		// notification.put("deviceID", deviceID);
		//
		// PushMsgToTagRequest request = new
		// PushMsgToTagRequest().addMsgExpires(new
		// Integer(3600)).addMessageType(1)
		// .addTagName(tagName).addMessage(notification.toString()).addDeployStatus(1).addDeviceType(4);
		//
		// PushMsgToTagResponse response = pushClient.pushMsgToTag(request);
		// log.info("msgId: " + response.getMsgId() + ",sendTime: " +
		// response.getSendTime() + ",timerId: "
		// + response.getTimerId());
		// } catch (PushClientException e) {
		// e.printStackTrace();
		// } catch (PushServerException e) {
		// log.info(String.format("requestId: %d, errorCode: %d, errorMessage: %s",
		// e.getRequestId(),
		// e.getErrorCode(), e.getErrorMsg()));
		// }
	}

	/**
	 * 
	 * admin标签代表角色是管理员和销售
	 * 
	 * 根据设备编号查询出公司编号，推送给公司编号标签和admin标签的用户
	 * 
	 * 若公司编号为空，则只推送给admin标签用户
	 * 
	 * @param code
	 *            接收端发送的编号,以END;结尾
	 */
	public static void pushMessageToIOS(String code) {
		// ApplicationContext ac = new
		// FileSystemXmlApplicationContext("classpath:applicationContext*.xml");
		// IDerviceDao derviceDao = (DerviceDao) ac.getBean("derviceDao");
		// if (!StringUtils.isBlank(code) && code.length() > 4 &&
		// code.endsWith("END;")) {
		// code = code.substring(0, code.length() - 4);
		// List<String> c_no = derviceDao.quereCNoByDeviceCode(code);
		// Long deviceID = derviceDao.queryDeviceIDByDeviceCode(code);
		// c_no.add("admin");
		// for (String tagName : c_no) {
		// pushMsgToTag(tagName, code + "有新作业日志.", code, deviceID);
		// }
		// }
	}

}
